/**
 * Copyright (C) 2025 ROKAE (Beijing) Technology Co., LTD.
 * All Rights Reserved.
 *
 * Information in this file is the intellectual property of Rokae Technology Co., Ltd,
 * And may contains trade secrets that must be stored and viewed confidentially.
 *
 * @file InspireRobotsAPI.h
 * @brief 插件操作接口
 */
#pragma once
#include <g3log/g3log.hpp>
#include <unistd.h>
#include "endtool/endtool_api.hpp"
#include "rl_cmd/morden_rl_cmd_api.hpp"

namespace InspireRobotsUtil
{
    /**
     * @brief 电动夹爪 Modbus API 封装类
     * 通过底层 Modbus 接口（ModbusRTUEndtoolAPI）封装夹爪的控制指令。
     */
    class InspireRobotsAPI
    {
    public:
        /*
         * @brief 启动夹爪设备（写入角度设置）
         * @param slave_id 从设备ID
         * @param angle_set0 角度设置0
         * @param angle_set1 角度设置1
         * @param angle_set2 角度设置2
         * @param angle_set3 角度设置3
         * @param angle_set4 角度设置4
         * @param angle_set5 角度设置5
         * @return true 成功
         * @return false 失败
         */
        bool startInspireRobots(int slave_id,
                                int angle_set0, int angle_set1, int angle_set2,
                                int angle_set3, int angle_set4, int angle_set5);

        /**
         * @brief 设置夹爪从设备ID
         * @param slave_id 当前从设备ID
         * @param new_slave_id 新的从设备ID
         * @return true 成功
         * @return false 失败
         */
        bool setIDInspireRobots(int slave_id, int new_slave_id);

        /**
         * @brief 获取夹爪当前角度设置
         * @param slave_id 从设备ID
         * @param angle_set0 角度设置0
         * @param angle_set1 角度设置1
         * @param angle_set2 角度设置2
         * @param angle_set3 角度设置3
         * @param angle_set4 角度设置4
         * @param angle_set5 角度设置5
         * @return true 成功
         * @return false 失败
         */
        bool getAngleInspireRobots(int slave_id,
                                   int &angle_set0, int &angle_set1,
                                   int &angle_set2, int &angle_set3,
                                   int &angle_set4, int &angle_set5);

        /**
         * @brief 设置夹爪当前力设置
         * @param slave_id 从设备ID
         * @param force_set0 力设置0
         * @param force_set1 力设置1    
         * @param force_set2 力设置2
         * @param force_set3 力设置3
         * @param force_set4 力设置4
         * @param force_set5 力设置5
         * @return true 成功
         * @return false 失败
         */
        bool setForceInspireRobots(int slave_id,
                                   int force_set0, int force_set1,
                                   int force_set2, int force_set3,
                                   int force_set4, int force_set5);

        /**
         * @brief 设置夹爪当前速度设置
         * @param slave_id 从设备ID
         * @param speed_set0 速度设置0
         * @param speed_set1 速度设置1
         * @param speed_set2 速度设置2
         * @param speed_set3 速度设置3
         * @param speed_set4 速度设置4
         * @param speed_set5 速度设置5
         * @return true 成功
         * @return false 失败
         */
        bool setSpeedInspireRobots(int slave_id,
                                   int speed_set0, int speed_set1,
                                   int speed_set2, int speed_set3,
                                   int speed_set4, int speed_set5);

    private:
        xcore_api::endtool::ModbusRTUEndtoolAPI modbus_api; // 底层 Modbus 通信对象
    };
}